Advances in microelectronics and networking technology have enabled the development of increasingly complex computer systems. The software that controls these systems or operates thereon has also become exceedingly complex and costly to develop. As a result, companies will often wish to protect their software from reverse-engineering by competitors, from copying by pirates, or from tampering by persons attempting to undermine the integrity of the software's operation. While copyright law and patent law provide some level of protection, in many instances these legal protections are insufficient. What is needed are technical systems and methods for shielding the operational details of a piece of software from the view of others, and for resisting attempts to compromise the integrity of the software's operation. Yet due to the way software is often deployed, these are difficult tasks. For example, application software is often installed on a consumer's computer system, which is typically remote from the software developer's system. The consumer's system may thus provide an environment in which an attacker can analyze and modify the software with relative ease and with little risk of detection. Accordingly, systems and methods are also needed for protecting the secrecy and integrity of software when it is run in potentially hostile environments.